package exemple15.modeles;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import exemple15.boiteoutils.GestionBaseDeDonnees;
import exemple15.javabeans.Client;


public class ModeleClientDAO extends ModeleDAO{
    
	// Variables
	Connection connexion=null;
	ResultSet resultat=null;
	private static List<Client> listeClients;

    

    // retourner la liste des clients
	public List<Client> getListeClient()
	{	
		// Variables
		PreparedStatement requete=null;
		Client client=null;
		String requeteString=null;
		listeClients=new ArrayList<Client>();
		
		try
		{			
			// Ouverture d'une connexion
			connexion=super.getConnection();
			
			// requete pour la liste des clients
			requeteString="SELECT * FROM client";
			requete=connexion.prepareStatement(requeteString);
			
			// Execution de la requete
			resultat=requete.executeQuery();

			// On stocke le resultat dans une liste
			if(resultat!=null)
			{
				while(resultat.next())
				{
					// On effectue le mapping des attributs avec les champs de la table SQL
					client=mapperClient(resultat);
					
					// On ajoute l'objet a la liste des clients
					listeClients.add((Client)client);
				}
			}
		}
		catch(Exception e)
		{
		//	System.out.println("Erreur dans la requete dans la classe ModeleClientDAO fonction getListeClients");
		}
		finally
		{
			try
			{
				// Fermeture de la connexion
				if(resultat!=null)
				{
					GestionBaseDeDonnees.closeResulset(resultat);
				}
				if(requete!=null)
				{
					GestionBaseDeDonnees.closeRequest(requete);
				}
				if(connexion!=null)
				{
					GestionBaseDeDonnees.closeConnection(connexion);
				}
			}
			catch(Exception ex)
			{
				System.out.println("Erreur lors de la fermeture de la connexion avec la base de donnees dans la classe ModeleClientDAO fonction getListeClients");
			}	
		}
		
		// Retourner la liste des clients
		return listeClients;
	}
    
    
	
	// trouver un client dans la base
	public Client getClient(int idClient) 
	{
		// Variables
		PreparedStatement requete=null;
		Client client=null;
		String requeteString=null;
		
		try
		{
			// Ouverture d'une connexion
			connexion=super.getConnection();
			
			// Creation de la requete
			requeteString = "SELECT * FROM client WHERE idClient=?";
			
			// On prepare la requete
			requete=connexion.prepareStatement(requeteString);
			requete.setInt(1,idClient);
				
			// Execution de la requete
			resultat=requete.executeQuery();

			// On stocke le resultat dans l'objet client
			if(resultat!=null)
			{
				if(resultat.next())
				{
					// On effectue le mapping des attributs avec les champs de la table SQL
					client=mapperClient(resultat);
				}
			}
		}
		catch(Exception e)
		{
			client=null;
			System.out.println("Erreur dans la requete dans la classe ModeleClientDAO fonction getClient");
		}
		finally
		{
			try
			{
				// Fermeture de la connexion
				if(resultat!=null)
				{
					GestionBaseDeDonnees.closeResulset(resultat);
				}
				if(requete!=null)
				{
					GestionBaseDeDonnees.closeRequest(requete);
				}
				if(connexion!=null)
				{
					GestionBaseDeDonnees.closeConnection(connexion);
				}
			}
			catch(Exception ex)
			{
				System.out.println("Erreur lors de la fermeture de la connexion avec la base de donnees dans la classe ModeleClientDAO fonction getClient");
			}	
		}
		
		// Retourner le client
		return client;
	}
	
    

	// ajouter un client dans la base
	public int ajouterClient(Client client) 
	{
		// Variables
		PreparedStatement requete=null;
		String requeteString=null;
		int codeErreur=0;
	
		try
		{			
			// Ouverture d'une connexion
			connexion=super.getConnection();
			
			// Creation de la requete
			requeteString="INSERT INTO client (identifiant,motdepasse) VALUES(?,?)";
			
			// Preparation de la requete
			requete=connexion.prepareStatement(requeteString);
			requete.setString(1, client.getIdentifiant());
			requete.setString(2, client.getMotdepasse());
			
			// On vide le client par securite
			client=null;
			
			// Execution de la requete
			codeErreur=requete.executeUpdate();
		}
		catch(Exception e)
		{
			codeErreur=0;
			System.out.println("Erreur dans la requete dans la classe ModeleClientDAO fonction ajouterClient");
		}
		finally
		{
			try
			{
				// Fermeture de la connexion
				if(resultat!=null)
				{
					GestionBaseDeDonnees.closeResulset(resultat);
				}
				if(requete!=null)
				{
					GestionBaseDeDonnees.closeRequest(requete);
				}
				if(connexion!=null)
				{
					GestionBaseDeDonnees.closeConnection(connexion);
				}
			}
			catch(Exception ex)
			{
				System.out.println("Erreur lors de la fermeture de la connexion avec la base de donnees dans la classe ModeleClientDAO fonction ajouterClient");
			}	
		}
		
		// Retourner le code d'erreur
		return codeErreur;
    }
	
	
	
	
	// supprimer un client dans la base
	public int supprimerClient(int idClient) 
	{
		// Variables
		PreparedStatement requete=null;
		String requeteString=null;
		int codeErreur=0;
	
		try
		{			
			// Ouverture d'une connexion
			connexion=super.getConnection();
			
			// Supprimer le client
			requeteString="DELETE FROM client WHERE idClient=?";
			requete=connexion.prepareStatement(requeteString);
			requete.setInt(1, idClient);
			
			// Execution de la requete
			codeErreur=requete.executeUpdate();
		}
		catch(Exception e)
		{
			codeErreur=0;
			System.out.println("Erreur dans la requete dans la classe ModeleClientDAO fonction supprimerClient");
		}
		finally
		{
			try
			{
				// Fermeture de la connexion
				if(resultat!=null)
				{
					GestionBaseDeDonnees.closeResulset(resultat);
				}
				if(requete!=null)
				{
					GestionBaseDeDonnees.closeRequest(requete);
				}
				if(connexion!=null)
				{
					GestionBaseDeDonnees.closeConnection(connexion);
				}
			}
			catch(Exception ex)
			{
				System.out.println("Erreur lors de la fermeture de la connexion avec la base de donnees dans la classe ModeleClientDAO fonction supprimerClient");
			}	
		}
		
		// Retourner le code d'erreur
		return codeErreur;
	}
	
	
	
	
	// modifier un client dans la base
	public int modifierClient(Client client) 
	{
		// Variables
		PreparedStatement requete=null;
		String requeteString=null;
		int codeErreur=0;
	
		try
		{			
			// Ouverture d'une connexion
			connexion=super.getConnection();
			
			// Creation de la requete
			requeteString="UPDATE client set identifiant=?,motdepasse=? WHERE idClient=?";
			requete=connexion.prepareStatement(requeteString);
			requete.setString(1, client.getIdentifiant());
			requete.setString(2, client.getMotdepasse());
			requete.setInt(3, client.getIdClient());
				
			// On vide le client par securite
			client=null;
			
			// Execution de la requete
			codeErreur=requete.executeUpdate();
		}
		catch(Exception e)
		{
			System.out.println("Erreur dans la requete dans la classe ModeleClientDAO fonction modifierClient");
		}
		finally
		{
			try
			{
				// Fermeture de la connexion
				if(resultat!=null)
				{
					GestionBaseDeDonnees.closeResulset(resultat);
				}
				if(requete!=null)
				{
					GestionBaseDeDonnees.closeRequest(requete);
				}
				if(connexion!=null)
				{
					GestionBaseDeDonnees.closeConnection(connexion);
				}
			}
			catch(Exception ex)
			{
				System.out.println("Erreur lors de la fermeture de la connexion avec la base de donnees dans la classe ModeleClientDAO fonction modifierClient");
			}	
		}
		
		// Retourner le code d'erreur
		return codeErreur;
	}
	
	
	// Realiser la transformation Relationnel vers Objet
    public Client mapperClient(ResultSet resultat)
    {
    	// Variables
    	Client client=new Client();
    	
    	try 
    	{	
	    	if (resultat.getString("idClient")==null)
	    	{
	    		client.setIdClient(0);
	    	}
	    	else 
	    	{
	    		client.setIdClient(resultat.getInt("idClient"));		
	    	}

	    	if (resultat.getString("identifiant")==null)
	    	{
	    		client.setIdentifiant("");		
	    	}
	    	else 
	    	{
	    		client.setIdentifiant(resultat.getString("identifiant"));	
	    	}
	    	
	    	if (resultat.getString("motdepasse")==null)
	    	{
	    		client.setMotdepasse("");
	    	}
	    	else 
	    	{
	    		client.setMotdepasse(resultat.getString("motdepasse"));
	    	}		
    	}
        catch (Exception e)
        {
        	//Si il y a une erreur durant le mapping des attributs
	    	client=null;
	    	System.out.println("Erreur lors du mapping des attributs d'un client dans la class ModeleClientDAO, fonction mapperClient");
        }
        
        //On retourne le client
        return client;
    }
	
}
